import axios from 'axios' // 需安装依赖：npm install axios

// 火山方舟 API Key（UUID 格式，直接从控制台复制）
// const API_KEY = '9297074e-c581-4a6c-8945-c21cbd06f6ae' // 替换为您的实际 API Key
// 模型 endpoint_id（在控制台「模型部署」页面获取）
// const ENDPOINT_ID = 'ep-20250731132320-pkcc9' // 例如："ep-20240520123456-xxxx"

// 导出视频生成函数
// export async function generateVideo(prompt: string) {
//   try {
//     const response = await axios({
//       method: 'POST',
//       url: '/volcano-api/contents/generations/tasks', // 使用代理路径
//       headers: {
//         'Content-Type': 'application/json',
//         Authorization: `Bearer ${API_KEY}`, // 鉴权格式：Bearer + 空格 + API Key
//       },
//       data: {
//         model: ENDPOINT_ID, // 必须使用 endpoint_id，而非模型名称
//         content: [
//           {
//             type: 'text',
//             text: prompt, // 使用传入的参数作为视频描述
//           },
//         ],
//         parameters: {
//           duration: 5, // 视频时长（秒）
//           resolution: '1080p', // 分辨率
//         },
//       },
//     })

//     console.log('视频生成任务提交成功:', response.data)
//     return response.data
//   } catch (error) {
//     console.error(
//       '调用失败:',
//       (error as { response?: { data: unknown }; message?: string })?.response
//         ?.data || (error as { message?: string })?.message,
//     )
//     throw error
//   }
// }

// 导出查询视频结果函数
// export async function getVideoResult(taskId: string) {
//   try {
//     const response = await axios({
//       method: 'GET',

//       url: `/volcano-api/contents/generations/tasks/${taskId}`, // 使用代理路径
//       headers: {
//         'Content-Type': 'application/json',
//         Authorization: `Bearer ${API_KEY}`, // 鉴权格式：Bearer + 空格 + API Key
//       },
//     })

//     console.log('查询视频结果成功:', response.data)
//     return response.data
//   } catch (error) {
//     console.error(
//       '查询视频结果失败:',
//       (error as { response?: { data: unknown }; message?: string })?.response
//         ?.data || (error as { message?: string })?.message,
//     )
//     throw error
//   }
// }
// 删除直接调用函数的代码
// generateVideo()
// generateVideo1()
// generateVideo2()

// 新的视频生成接口 - 从环境变量获取配置
const chufa = axios.create({
    baseURL: import.meta.env.VITE_CHUFA_API_BASE_URL || "https://open.bigmodel.cn/api",
    timeout: 10000,
    headers: {
        "Content-Type": "application/json",
        "Authorization": `Bearer ${import.meta.env.VITE_CHUFA_API_KEY || "f6ce344a52de4a8a8e4bbe087821e6e8.fTrtLwY2exyCITEj"}`,
    },
});

// 生成视频 - 增加可配置参数和类型定义
export async function generateVideo(
    prompt = "", 
    options: { 
        model?: string, 
        userId?: string, 
        duration?: number, 
        resolution?: string
    } = {}
) {
    try {
        const { 
            model = "cogvideox-flash",
            userId = import.meta.env.VITE_CHUFA_USER_ID || "40351753789750035",
            duration = 10, // 默认10秒
            resolution = "1080p" // 默认1080p
        } = options;

        const res = await chufa.post("/paas/v4/videos/generations", {
            model,
            prompt,
            user_id: userId,
            parameters: {
                duration,
                resolution
            }
        });
        console.log("视频生成任务已提交，任务ID:", res.data.id);
        return res.data;
    } catch (error) {
        const errorMsg = (error as { response?: { data: unknown }; message?: string })?.response?.data || (error as { message?: string })?.message;
        console.error("生成视频失败:", errorMsg);
        throw new Error(`视频生成失败: ${String(errorMsg)}`);
    }
}

// 查询视频结果
export async function getVideoResult(taskId:any) {
    try {
        const res = await chufa.get(`/paas/v4/async-result/${taskId}`);
        
        console.log("任务状态:", res.data.task_status);
        
        // 检查任务状态
        if (res.data && res.data.task_status) {
            if (res.data.task_status === 'SUCCESS' && res.data.video_result) {
                console.log("✅ 视频生成完成！");
                return res.data.video_result;
            } else if (res.data.task_status === 'FAILED') {
                console.log("❌ 任务失败:", res.data);
                return null;
            } else {
                console.log("⏳ 任务还在处理中...");
                return null;
            }
        } else {
            console.log("❓ 无法获取任务状态");
            return null;
        }
    } catch (error) {
        console.error("查询视频失败:", (error as { response?: { data: unknown }; message?: string })?.response?.data || (error as { message?: string })?.message);
        throw error;
    }
}

// 轮询查询视频结果 - 增加进度回调功能
async function pollVideoResult(
    taskId: string, 
    maxAttempts = 30, 
    onProgress?: (progress: number, status: string) => void
) {
    console.log(`开始轮询任务 ${taskId}，最多 ${maxAttempts} 次...`);
    
    for (let attempt = 1; attempt <= maxAttempts; attempt++) {
        const progress = Math.min(90, Math.floor((attempt / maxAttempts) * 90));
        console.log(`\n第 ${attempt} 次查询... (进度: ${progress}%)`);
        onProgress && onProgress(progress, `查询中 (${attempt}/${maxAttempts})`);

        try {
            const result = await getVideoResult(taskId);
            if (result) {
                console.log("🎉 视频生成成功！");
                return result;
            }

            if (attempt < maxAttempts) {
                console.log("⏰ 等待 10 秒后重试...");
                await new Promise(resolve => setTimeout(resolve, 10000));
            }
        } catch (error) {
            console.error(`❌ 第 ${attempt} 次查询失败:`, (error as { message?: string })?.message);
            if (attempt < maxAttempts) {
                await new Promise(resolve => setTimeout(resolve, 10000));
            }
        }
    }

    console.log("⏰ 达到最大查询次数，视频可能还在生成中");
    return null;
}

// 完整的视频生成流程 - 增加进度回调
export async function generateVideoComplete(
    prompt = "", 
    options: { 
        model?: string, 
        userId?: string, 
        duration?: number, 
        resolution?: string,
        maxAttempts?: number,
        onProgress?: (progress: number, status: string) => void
    } = {}
) {
    try {
        console.log("🚀 开始生成视频...");
        console.log("📝 提示词:", prompt);
        
        const { maxAttempts = 30, onProgress, ...generateOptions } = options;

        // 1. 提交视频生成任务
        const generationResult = await generateVideo(prompt, generateOptions);
        const taskId = generationResult.id;
        console.log("📋 任务ID:", taskId);
        onProgress && onProgress(10, "任务已提交");

        // 2. 轮询查询结果
        console.log("🔍 开始查询生成结果...");
        const result = await pollVideoResult(taskId, maxAttempts, onProgress);

        if (result) {
            console.log("✅ 视频生成流程完成！");
            onProgress && onProgress(100, "生成完成");
            return result;
        } else {
            console.log("❌ 视频生成失败或超时");
            onProgress && onProgress(0, "生成失败");
            return null;
        }
    } catch (error) {
        console.error("❌ 视频生成流程失败:", error);
        onProgress && onProgress(0, `生成错误: ${error instanceof Error ? error.message : String(error)}`);

        return null;
    }
}

// 测试函数
// async function testVideoGeneration() {
//     console.log("🧪 开始测试视频生成...\n");
//     
//     // 测试生成新视频
//     const result = await generateVideoComplete("湖南芙蓉镇夜晚风景");
//     
//     if (result) {
//         console.log("\n🎬 生成的视频信息:");
//         console.log("视频链接:", result[0].url);
//         console.log("封面链接:", result[0].cover_image_url);
//     }
// }

// 运行测试
// testVideoGeneration();
